package com.syedu.day11;

import java.math.BigDecimal;
import java.math.BigInteger;

/**
 * description：大数字类型
 * java.math.BigInteger     大整数类型
 * java.math.BigDecimal     大浮点数类型
 *
 * @author Administrator
 * @date 2022/3/24 15:29
 */
public class BigIntegerDemo {
    public static void main(String[] args) {
        //常量
        BigInteger one = BigInteger.ONE;
        BigInteger zero = BigInteger.ZERO;
        BigInteger ten = BigInteger.TEN;
        BigInteger two = BigInteger.TWO;

        //创建大数字类型对象
        BigInteger bi1 = new BigInteger("55555555555555555555555555555555555555555555555555555555555555555555");
        BigInteger bi2 = new BigInteger("22222222222222222222222222222222222222222222222222222222222222222222");

        BigDecimal bd1 = new BigDecimal("3333333333333333333333333333333333333333333333.22222222222222222222222222222222");
        BigDecimal bd2 = new BigDecimal("2222222222222222222222222222222222222222222222.11111111111111111111111111111111");

        //调用大数字类型的方法来实现加减乘除
        BigInteger add = bi1.add(bi2);//加法
        System.out.println(add);

        BigInteger subtract = bi1.subtract(bi2);//减法
        System.out.println(subtract);

        BigInteger multiply = bi1.multiply(bi2);//乘法
        System.out.println(multiply);

        BigInteger divide = bi1.divide(bi2);//除法
        System.out.println(divide);

        BigDecimal add1 = bd1.add(bd2);//加法
        System.out.println(add1);

        System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");

        BigInteger fac = fac(100000);
        System.out.println(fac);
    }

    /**
     * 递归求阶乘
     */
    public static BigInteger fac(int num) {
        //把num转换成大数字类型
        BigInteger bi = new BigInteger(num + "");
        if (num == 1) {
            return BigInteger.ONE;
        }
        return bi.multiply(fac(num - 1));
    }
}